/*
Copyright 2011 Mary Suárez Machado

Este programa es de software libre: usted puede redistribuirlo y/o modificarlo según los términos de la Licencia de Gran pública de GNU como publicado por la Fundación de Software Libre, versión 3 de la Licencia, (o en su opción) cualquier versión posterior.

 Este programa es distribuido en la esperanza que será útil, pero SIN CUALQUIER GARANTÍA; sin aún la garantía implícita de VALOR COMERCIAL O SALUD PARA UN OBJETIVO PARTICULAR. Mirar la Licencia de Gran pública de GNU para más detalles.
*/


 /**
 *@file crc.cpp
 *@brief Implementaciones de las funciones del módulo crc
 *@author Mary Carmen Suarez
 *
 */

#include <iostream>
#include <crc.h>

CRC :: CRC()
{
	crc=0xFFFFFFFF;
	unsigned long cc;
	int n,k;
	for (n=0;n<256;n++)
	{
		cc=(unsigned long) n;
		for (k=0; k<8; k++)
		{
			if (cc&1)
				cc=0xedb88320L ^ (cc>>1);
			else cc=cc>>1;
		}
		tabla[n]=cc;
	}

}
		
void CRC :: Paridad_AddByte (unsigned char byte)
{
	crc=(crc>>8)^tabla[(crc^byte)&0xFF];
}

unsigned int CRC :: Paridad_Get () const
{
	return crc^0xFFFFFFFF;
}
